package org.travel.app.mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.travel.app.entity.IdVerification;
import org.travel.app.entity.spots.Spots;
import org.travel.app.entity.user.User;
import org.travel.app.entity.user.UserSpotsStart;

import java.util.List;

/**
 * @author nmm
 * @date 2024-11-2024/11/22
 * @deriction njm......
 */
public interface UserMapper {
    /**
     * 查询全部用户
     * @return
     */
    List<User>  selectAllUser();

    /**
     * 通过用户名判断用户是否存在
     * @param userName
     * @return
     */
    User enSureUserExit(String userName);

    /**
     * 通过手机号判断用户是否存在
     * @param phone
     * @return
     */
    User enSurePhoneEXit(String phone);

    /**
     * 注册用户
     * @param user
     * @return
     */
    Integer addUser(User user);

    /**
     * 保存游客预约个人信息
     * @param reservationUser
     */
    void addReservationUser(IdVerification reservationUser);

    /**
     * 查询所有游客个人信息
     * @return
     */
    List<IdVerification>  getAllReservationUser();

    /**
     * 查询是否是填写的同一个游客信息
     * @param idVerification
     */
    void enSureSomeUser(@ModelAttribute("reservationUser") IdVerification idVerification);

    /**
     * 通过用id查询用户积分
     * @param userId
     */
    Integer   getPointsByUserId(@Param("userId") int userId);


    /**
     * 通过用户id统计订单数
     * @param userId
     */
    Integer  getUserOrderCount(@Param("userId") int userId);


    /**
     *通过用户id统计优惠券数量
     * @param userId
     */
    Integer getUserTicketCount(@Param("userId") int userId);

    /**
     * 统计用户收藏数量
     * @param userId
     * @return
     */
    Integer getUserStartCount(@Param("userId") int userId);

    /**
     * 用户收藏
     * @param userSpotsStart
     */
    void addUserStart(UserSpotsStart userSpotsStart);

    /**
     * 修改收藏状态
     * @param userSpotsStart
     */
    void updateUserStart(UserSpotsStart userSpotsStart);

    /**
     * 判断是否收藏指定商品
     * @param userSpotsStart
     */
    UserSpotsStart isHaveStartSpots(@Param("start") UserSpotsStart userSpotsStart);


    /**
     * 获取用户收藏景点
     * @return
     */
    List<Spots> getStartSpots(@Param("userId") int userId);


}